package com.example.day02;

//菲波那切数列  递归算法
public class RecursionDemo {
    public static void main(String[] args) {

        System.out.println(fei(8));
        System.out.println(jie(6));
        System.out.println(feiQueue(8));
        System.out.println(jiecirculate(6));


        System.out.println(feivariable(8));
    }


    //递归实现 斐波那契数列
    public  static  int  fei(int n){
        if(n==1 ||n==2){
            return  1;
        }
        return fei(n-1)+fei(n-2);
    }

    //递归实现 阶乘
    public  static  int jie(int n){
        if(n==1||n==0){
            return  1;
        }
        return  n*jie(n-1);
    }


    //循环实现菲波那切数列          ---使用的是数组
    public  static  int  feiQueue(int n){
        if(n==1 || n==2){
            return  1;
        }

        int []arr=new int[n];
        arr[0]=1;
        arr[1]=1;
        for(int i=2;i<n;i++){
            arr[i]=arr[i-1]+arr[i-2];
        }
        return arr[n-1];

    }


    //循环实现阶乘
    public  static  int jiecirculate(int n){
        if(n==1 || n==0){
            return  1;
        }
        int m=1;
        for(int i=1;i<=n;i++){
            m=m*i;
        }
        return m;
    }


    //菲波那切数列                使用变量来实现
    public  static  int feivariable(int n){
        if(n==1 || n==2){
            return  1;
        }

        int start =1;
        int end=1;
        int result=0;
        for(int i=3;i<=n;i++){
            result=start+end;
            start=end;
            end=result;
        }

        return  result;
    }

}
